/* GUI CONVERTED from reoprp21.p (converter v1.76) Mon May 27 10:17:23 2002 */
/* reoprp21.p - PRODUCTIVITY BY ITEM REPORT                             */
/* Copyright 1986-2002 QAD Inc., Carpinteria, CA, USA.                  */
/* All rights reserved worldwide.  This is an unpublished work.         */
/* $Revision: 1.9.1.4 $                                                     */
/*V8:ConvertMode=FullGUIReport                                          */
/* REVISION: 1.0      LAST MODIFIED: 02/05/87   BY: EMB *A9*            */
/* REVISION: 2.0      LAST MODIFIED: 05/12/87   BY: EMB                 */
/* REVISION: 2.0      LAST MODIFIED: 06/30/87   BY: EMB                 */
/* REVISION: 2.0      LAST MODIFIED: 08/31/87   BY: EMB                 */
/* REVISION: 2.0      LAST MODIFIED: 04/12/88   BY: EMB                 */
/* REVISION: 2.0      LAST MODIFIED: 04/20/88   BY: EMB                 */
/* REVISION: 4.0      LAST MODIFIED: 02/24/88   BY: WUG *A175*          */
/* REVISION: 5.0      LAST MODIFIED: 03/27/89   BY: EMB                 */
/* REVISION: 7.3      LAST MODIFIED: 04/27/93   BY: DZS *GA37*          */
/* REVISION: 7.4      LAST MODIFIED: 01/12/94   BY: qzl *H276*          */
/* REVISION: 7.4      LAST MODIFIED: 10/07/94   BY: pxd *FS20*          */
/* REVISION: 7.4      LAST MODIFIED: 10/27/94   BY: pxd *FS86*          */
/* REVISION: 7.4      LAST MODIFIED: 12/06/94   BY: cpp *FU18*          */
/* REVISION: 7.4      LAST MODIFIED: 12/09/94   BY: cpp *FU45*          */
/* REVISION: 7.4      LAST MODIFIED: 10/09/95   BY: str *G0YR*          */
/* REVISION: 8.6      LAST MODIFIED: 10/14/97   BY: bvm *K0Z8*          */
/* REVISION: 8.6E     LAST MODIFIED: 02/23/98   BY: *L007* A. Rahane          */
/* REVISION: 8.6E     LAST MODIFIED: 10/04/98   BY: *J314* Alfred Tan         */
/* REVISION: 9.1      LAST MODIFIED: 03/24/00   BY: *N08T* Annasaheb Rahane   */
/* REVISION: 9.1      LAST MODIFIED: 05/04/00   BY: *N09M* Inna Lyubarsky     */
/* REVISION: 9.1      LAST MODIFIED: 08/12/00   BY: *N0KP* myb                */
/* Old ECO marker removed, but no ECO header exists *F0PN*                    */
/* $Revision: 1.9.1.4 $    BY: Jean Miller           DATE: 04/26/02  ECO: *P06H*  */
/******************************************************************************/
/* All patch markers and commented out code have been removed from the source */
/* code below. For all future modifications to this file, any code which is   */
/* no longer required should be deleted and no in-line patch markers should   */
/* be added.  The ECO marker should only be included in the Revision History. */
/******************************************************************************/

/* DISPLAY TITLE */

/*GUI global preprocessor directive settings */
&GLOBAL-DEFINE PP_PGM_RP TRUE
&GLOBAL-DEFINE PP_ENV_GUI TRUE


/*GUI preprocessor directive settings */
&SCOPED-DEFINE PP_GUI_CONVERT_MODE REPORT

{mfdtitle.i "2+ "}

define variable emp        like op_emp.
define variable emp1       like op_emp.
define variable part       like op_part.
define variable part1      like op_part.
define variable wkctr      like op_wkctr.
define variable wkctr1     like op_wkctr.
define variable mach       like op_mch.
define variable mach1      like op_mch.
define variable opdate     like op_date.
define variable opdate1    like op_date.
define variable tot_hours  as decimal format "->,>>9.9" label "Tot Hrs".
define variable std_hours  like tot_hours label "Std Hrs".
define variable prod_hours like tot_hours label "Prod Hrs".
define variable down_hours like tot_hours label "Down Hrs".

define variable achvd_rate as decimal label "Act Rate".
define variable pcs_comp   as decimal label "Pcs Comp".
define variable std_rate   as decimal label "Std Rate".
define variable shift      like op_shift.
define variable detail     like mfc_logical format "Detail/Summary"
                           label "Report Format" initial yes.
define variable prod_pct   as decimal.
define variable util_pct   as decimal.
define variable attain_pct as decimal.

define variable op_qty_comp_st   as decimal no-undo.
define variable std_hours_st     as decimal no-undo.
define variable down_hours_st    as decimal no-undo.
define variable prod_hours_st    as decimal no-undo.
define variable prod_pct_st      as decimal no-undo.
define variable util_pct_st      as decimal no-undo.
define variable attain_pct_st    as decimal no-undo.


/*GUI preprocessor Frame A define */
&SCOPED-DEFINE PP_FRAME_NAME A

FORM /*GUI*/ 
   
 RECT-FRAME       AT ROW 1.4 COLUMN 1.25
 RECT-FRAME-LABEL AT ROW 1   COLUMN 3 NO-LABEL
 SKIP(.1)  /*GUI*/
part      colon 15      part1     label {t001.i} colon 49
   emp       colon 15      emp1      label {t001.i} colon 49
   opdate    colon 15      opdate1   label {t001.i} colon 49
   wkctr     colon 15      wkctr1    label {t001.i} colon 49
   mach      colon 15      mach1     label {t001.i} colon 49
   shift     colon 15 skip (1)
   detail    colon 15
 SKIP(.4)  /*GUI*/
with frame a side-labels width 80 attr-space NO-BOX THREE-D /*GUI*/.

 DEFINE VARIABLE F-a-title AS CHARACTER.
 F-a-title = &IF (DEFINED(SELECTION_CRITERIA) = 0)
  &THEN " Selection Criteria "
  &ELSE {&SELECTION_CRITERIA}
  &ENDIF .
 RECT-FRAME-LABEL:SCREEN-VALUE in frame a = F-a-title.
 RECT-FRAME-LABEL:WIDTH-PIXELS in frame a =
  FONT-TABLE:GET-TEXT-WIDTH-PIXELS(
  RECT-FRAME-LABEL:SCREEN-VALUE in frame a + " ", RECT-FRAME-LABEL:FONT).
 RECT-FRAME:HEIGHT-PIXELS in frame a =
  FRAME a:HEIGHT-PIXELS - RECT-FRAME:Y in frame a - 2.
 RECT-FRAME:WIDTH-CHARS IN FRAME a = FRAME a:WIDTH-CHARS - .5. /*GUI*/

/*GUI preprocessor Frame A undefine */
&UNDEFINE PP_FRAME_NAME



/* SET EXTERNAL LABELS */
setFrameLabels(frame a:handle).

{wbrp01.i}


/*GUI*/ {mfguirpa.i true "printer" 132 " " " " " "  }

/*GUI repeat : */
/*GUI*/ procedure p-enable-ui:

   if part1   = hi_char  then part1   = "".
   if wkctr1  = hi_char  then wkctr1  = "".
   if mach1   = hi_char  then mach1   = "".
   if emp1    = hi_char  then emp1    = "".
   if opdate  = low_date then opdate  = ?.
   if opdate1 = hi_date  then opdate1 = ?.

   if c-application-mode <> 'web' then
      
run p-action-fields (input "display").
run p-action-fields (input "enable").
end procedure. /* p-enable-ui, replacement of Data-Entry GUI*/

/*GUI*/ procedure p-report-quote:


   {wbrp06.i &command = update &fields = " part part1 emp emp1 opdate
        opdate1 wkctr wkctr1 mach mach1 shift detail " &frm = "a"}

   if (c-application-mode <> 'web') or
      (c-application-mode = 'web' and
      (c-web-request begins 'data')) then do:

      if part1   = "" then part1   = hi_char.
      if wkctr1  = "" then wkctr1  = hi_char.
      if mach1   = "" then mach1   = hi_char.
      if emp1    = "" then emp1    = hi_char.
      if opdate  = ?  then opdate  = low_date.
      if opdate1 = ?  then opdate1 = hi_date.

      bcdparm = "".
      {mfquoter.i part   }
      {mfquoter.i part1  }
      {mfquoter.i emp    }
      {mfquoter.i emp1   }
      {mfquoter.i opdate }
      {mfquoter.i opdate1}
      {mfquoter.i wkctr  }
      {mfquoter.i wkctr1 }
      {mfquoter.i mach   }
      {mfquoter.i mach1  }
      {mfquoter.i shift  }
      {mfquoter.i detail }

   end.

   /* OUTPUT DESTINATION SELECTION */
   
/*GUI*/ end procedure. /* p-report-quote */
/*GUI - Field Trigger Section */

/*GUI MFSELxxx removed*/
/*GUI*/ procedure p-report:
/*GUI*/   {gpprtrpa.i "printer" 132 " " " " " " " " }
/*GUI*/   mainloop: do on error undo, return error on endkey undo, return error:



   {mfphead.i}

   if shift > "" then do:
      FORM /*GUI*/ 
         header
         getTermLabelRtColon("SHIFT",11) format "x(11)" at 61
         shift
      with STREAM-IO /*GUI*/  frame shift width 132 no-attr-space page-top.
      view frame shift.
   end.

   for each op_hist
      where (op_part >= part and op_part <= part1)
        and (op_wo_op = op_wo_op)
        and (op_date >= opdate and op_date <= opdate1)
        and (op_emp >= emp and op_emp <= emp1)
        and (op_wkctr >= wkctr and op_wkctr <= wkctr1)
        and (op_mch >= mach and op_mch <= mach1)
        and (op_type = "LABOR" or op_type = "DOWNTIME")
        and (op_shift = shift or shift = "")
        use-index op_date
      no-lock
         break by op_part
               by op_wo_op
               by op_date
               by op_wkctr
               by op_emp
      with frame b down width 132 no-attr-space:
      /* SET EXTERNAL LABELS */
      setFrameLabels(frame b:handle).

      if c-application-mode <> 'web' then
         view frame phead.

      if first-of(op_wo_op) then do:
         if page-size - line-counter < 7 then page.
         display WITH STREAM-IO /*GUI*/ .
         if first-of (op_part) or detail then do:

            put {gplblfmt.i
               &FUNC=getTermLabel(""ITEM_NUMBER"",18)
               &CONCAT="': '"
               } to 18 op_part.
            find pt_mstr where pt_part = op_part no-lock no-error.
            if available pt_mstr then
               put " " pt_desc1 + " " + pt_desc2 format "x(50)" skip.
         end.

         find last ro_det where ro_routing = op_part
            and ro_op = op_wo_op
            and (ro_start = ? or ro_start <= opdate) and
            (ro_end = ? or ro_end >= opdate1)
         no-lock no-error.

         if available ro_det then
            put {gplblfmt.i
                   &FUNC=getTermLabel(""OPERATION"",18)
                   &CONCAT="': '"
                } to 18
               string(ro_op) space(3) ro_desc format "x(50)".
         if detail then put skip(1).
      end. /* IF FIRST-OF OP_WO_OP */

      assign
         prod_hours = 0
         down_hours = 0.

      if op_type = "LABOR" then
         prod_hours =  op_act_setup + op_act_run.
      if op_type = "DOWNTIME" then
         down_hours = op_act_setup + op_act_run.

      accumulate op_qty_comp (total by op_emp).
      accumulate prod_hours  (total by op_emp).
      accumulate down_hours  (total by op_emp).
      std_hours = prod_hours.
      if op_type = "LABOR" and op_std_run <> 0 then
         std_hours = op_act_setup + (op_std_run * op_qty_comp).
      accumulate std_hours (total by op_emp).

      accumulate prod_hours (total by op_wo_op).
      accumulate down_hours (total by op_wo_op).
      accumulate std_hours (total by op_wo_op).

      accumulate prod_hours (total by op_part).
      accumulate down_hours (total by op_part).
      accumulate std_hours (total by op_part).

      tot_hours = prod_hours + down_hours.
      accumulate tot_hours (total by op_wo_op).
      accumulate tot_hours (total by op_part).

      if last-of(op_emp) then do:
         assign
            tot_hours = (accum sub-total by op_emp prod_hours)
                      + (accum sub-total by op_emp down_hours)
            pcs_comp = accum sub-total by op_emp op_qty_comp
            achvd_rate = 0.
         if (accum sub-total by op_emp prod_hours) <> 0 then
            achvd_rate = pcs_comp / (accum sub-total by op_emp prod_hours).
         std_rate = 0.
         if (accum sub-total by op_emp std_hours) <> 0 then
            std_rate = pcs_comp / (accum sub-total by op_emp std_hours).

         if page-size - line-counter < 2 then page.

         if detail then do:

            assign
               op_qty_comp_st     = (accum sub-total by op_emp op_qty_comp)
               std_hours_st       = (accum sub-total by op_emp std_hours)
               down_hours_st      = (accum sub-total by op_emp down_hours)
               prod_hours_st      = (accum sub-total by op_emp prod_hours)
               prod_pct_st        = 100 * std_hours_st / prod_hours_st
               util_pct_st        = 100 * prod_hours_st / (prod_hours_st + down_hours_st)
               attain_pct_st      = 100 * std_hours_st / (prod_hours_st + down_hours_st).

            display
               op_wkctr
               op_mch
               op_emp
               op_qty_comp_st label "Qty Completed" format "->>,>>>,>>9.9"
               std_rate                             format "->>>,>>9.9<<"
               achvd_rate                           format "->>>,>>9.9<<"
               std_hours_st   label "Std Hrs"       format "->>>>9.9"
               tot_hours
               down_hours_st  label "Down Hrs"      format "->>>9.9"
               prod_hours_st  label "Prod Hrs"      format "->>>9.9"
               prod_pct_st    label "Prod %"        format "->>9.9"
                              when ( prod_hours_st ) <> 0
               util_pct_st    label "Util %"        format "->>9.9"
                              when (prod_hours_st + down_hours_st) <> 0
               attain_pct_st  label "Attain %"      format "->>9.9"
                              when (prod_hours_st + down_hours_st) <> 0
               op_date        label "Date" no-attr-space WITH STREAM-IO /*GUI*/ .
         end.  /*IF DETAIL */
      end.  /* IF LAST-OF OP_EMP */

      /* PRINT OPERATION TOTAL, IF "DETAIL REPORT", OPERATION TOTAL WILL BE ON
       * ON A NEW LINE.  IF "SUMMARY REPORT", INFO WILL BE CONTINUED ON THE
       * LINE THAT WAS STARTED IN A PREVIOUS SECTION
       * THIS NEXT SECTION CHECKS FOR DIV BY ZERO TO AVOID PROGRESS ? MARK */
      if last-of (op_wo_op) then do:
         prod_pct   = 0.
         if (accum sub-total by op_wo_op prod_hours) <> 0
         then
            prod_pct = 100 * (accum sub-total by op_wo_op std_hours)
                           / (accum sub-total by op_wo_op prod_hours).

         util_pct = 0.
         if (accum sub-total by op_wo_op tot_hours) <> 0
         then
            util_pct = 100 * (accum sub-total by op_wo_op prod_hours)
                           / (accum sub-total by op_wo_op tot_hours).

         attain_pct = 0.
         if (accum sub-total by op_wo_op tot_hours) <> 0
         then
            attain_pct = 100 * (accum sub-total by op_wo_op std_hours)
                             / (accum sub-total by op_wo_op tot_hours).

         if detail then
            put {gplblfmt.i
                   &FUNC=getTermLabel(""OPERATION_TOTAL"",20)
                   &CONCAT="':'"
                } to 62 space(1).
         put
            (accum sub-total by op_wo_op std_hours)
            format "->,>>9.9" to 71
            (accum sub-total by op_wo_op tot_hours)
            format "->,>>9.9" to 80
            (accum sub-total by op_wo_op down_hours)
            format "->,>>9.9" to 89
            (accum sub-total by op_wo_op prod_hours)
            format "->,>>9.9" to 98

            prod_pct   format "->>9.9%" to 106
            util_pct   format "->>9.9%" to 113
            attain_pct format "->>9.9%" to 122 skip.
      end.  /* LAST-OF OP_WO_OP */

      /* PRINT TOTAL LINE FOR ITEM */
      /* THE FOLLOWING CHECKS FOR DIV BY ZERO TO PREVENT PROGRESS ? MARK */
      if last-of(op_part) then do:
         prod_pct   = 0.
         if (accum sub-total by op_part prod_hours) <> 0
         then
            prod_pct = 100 * (accum sub-total by op_part std_hours)
                           / (accum sub-total by op_part prod_hours).

         util_pct = 0.
         if (accum sub-total by op_part tot_hours) <> 0
         then
            util_pct = 100 * (accum sub-total by op_part prod_hours)
                           / (accum sub-total by op_part tot_hours).

         attain_pct = 0.
         if (accum sub-total by op_part tot_hours) <> 0
         then
            attain_pct = 100 * (accum sub-total by op_part std_hours)
                             / (accum sub-total by op_part tot_hours).

         put skip(1)
            {gplblfmt.i
               &FUNC=getTermLabel(""ITEM_TOTAL"",20)
               &CONCAT="':'"
            } to 62 space(1)
            (accum sub-total by op_part std_hours)
            format "->,>>9.9" to 71
            (accum sub-total by op_part tot_hours)
            format "->,>>9.9" to 80
            (accum sub-total by op_part down_hours)
            format "->,>>9.9" to 89
            (accum sub-total by op_part prod_hours)
            format "->,>>9.9" to 98

            prod_pct   format "->>9.9%" to 106
            util_pct   format "->>9.9%" to 113
            attain_pct format "->>9.9%" to 122 skip.
      end.  /* LAST-OF OP_PART */

      /* DISPLAY REPORT TOTAL */
      /* THIS NEXT SECTION CHECKS FOR DIV BY ZERO TO AVOID PROGRESS ? MARK */
      if last (op_part) then do:
         prod_pct   = 0.
         if (accum total prod_hours) <> 0
         then
            prod_pct = 100 * (accum total std_hours)
                           / (accum total prod_hours).

         util_pct = 0.
         if (accum total tot_hours) <> 0
         then
            util_pct = 100 * (accum total prod_hours)
                           / (accum total tot_hours).

         attain_pct = 0.
         if (accum total tot_hours) <> 0
         then
            attain_pct = 100 * (accum total std_hours)
                             / (accum total tot_hours).

         put skip(1)
            {gplblfmt.i
               &FUNC=getTermLabel(""REPORT_TOTAL"",16)
               &CONCAT="':'"
            } to 62 space(1)
            (accum total std_hours)  format "->,>>9.9" to 71
            (accum total tot_hours)  format "->,>>9.9" to 80
            (accum total down_hours) format "->,>>9.9" to 89
            (accum total prod_hours) format "->,>>9.9" to 98

            prod_pct   format "->>9.9%" to 106
            util_pct   format "->>9.9%" to 113
            attain_pct format "->>9.9%" to 122 skip.
      end.  /* LAST OP_PART */

      
/*GUI*/ {mfguichk.i } /*Replace mfrpchk*/

   end. /* FOR EACH OP_HIST WITH FRAME B */

   /* REPORT TRAILER */
   
/*GUI*/ {mfguitrl.i} /*Replace mfrtrail*/

/*GUI*/ {mfgrptrm.i} /*Report-to-Window*/


end.  /* REPEAT */

{wbrp04.i &frame-spec = a}

/*GUI*/ end procedure. /*p-report*/
/*GUI*/ {mfguirpb.i &flds=" part part1 emp emp1 opdate opdate1 wkctr wkctr1 mach mach1 shift detail "} /*Drive the Report*/
